<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class LocalUploader {

	public function __construct() {
    }

    // 上传文件
    public function moveUploadedFile($file, $dirLocal = ''){
        if(empty($file) || !isset($file['tmp_name']) || !isset($file['type']) || !isset($file['name'])) {
           return false;
        }
        // 获取本地文件类型目录
        $type = explode('/', $file['type'])[0];
        // 文件类型后缀
        $arr = explode('.', $file['name']);
        $suffix = $arr[count($arr) - 1];
        $fileArr = $this->_generate_file_name($type, $suffix, $dirLocal);
        $fileName = $fileArr['filename'];
        $res = move_uploaded_file($file['tmp_name'], $fileName);
        if($res == false) {
            return false;
        }
        return $fileArr['web_url'];
    }

    // 上传base64图片
    public function uploadBase64Image($base64Str, $dirLocal = ''){
        // 写入图片
        $imageContent = get_img_content_from_base64($base64Str);
        // 获取本地文件类型目录
        $type = 'image';
        // 文件类型后缀
        $suffix = get_img_type_from_base64($base64Str);
        $fileArr = $this->_generate_file_name($type, $suffix, $dirLocal);
        $fileName = $fileArr['filename'];
        if(file_exists($fileName)){
            //有同名文件删除
            @unlink($fileName);
        }
        $res = file_put_contents($fileName, $imageContent);
        if($res == false) {
            return false;
        }
        return $fileArr['web_url'];
    }

    // 上传微信media图片
    public function uploadWechatImage($fileBody, $dirLocal = ''){
        // 获取本地文件类型目录
        $type = 'image';
        $fileArr = $this->_generate_file_name($type, 'jpg', $dirLocal);
        $fileName = $fileArr['filename'];
        if(file_exists($fileName)){
            //有同名文件删除
            @unlink($fileName);
        }
        $res = file_put_contents($fileName, $fileBody);
        if($res == false) {
            return false;
        }
        return $fileArr['web_url'];
    }

    // 上传微信media音频
    public function uploadWechatAudio($fileBody, $dirLocal = ''){
        // 获取本地文件类型目录
        $type = 'audio';
        $fileArr = $this->_generate_file_name($type, 'mp3', $dirLocal);
        $fileName = $fileArr['filename'];
        if(file_exists($fileName)){
            //有同名文件删除
            @unlink($fileName);
        }
        $res = file_put_contents($fileName, $fileBody);
        if($res == false) {
            return false;
        }
        return $fileArr['web_url'];
    }

    // 生成上传文件目录
    private function _generate_file_name($type, $suffix, $dirLocal = '') {
        // 本地文件根目录
        if(empty($dirLocal)) {
            $dirLocal = 'local' . DIRECTORY_SEPARATOR;
        }
        // 获取本地文件类型目录
        $dirDate = $dirLocal . $type . DIRECTORY_SEPARATOR . date('Y') . DIRECTORY_SEPARATOR . date('m') . DIRECTORY_SEPARATOR . date('d') . DIRECTORY_SEPARATOR;
        // 判断是否已存在目录，没有就创建目录
        is_dir($dirDate) || mkdir($dirDate, 0777, true);
        $randFileName = uniqid() . rand(1000, 9999) . '.' . $suffix; 
        $fileName = $dirDate . $randFileName; 
        // 文件url路径
        $webUrl = BASE_URL . 'local/' . $type . '/' . date('Y') . '/' . date('m') . '/' . date('d') . '/' . $randFileName;
        return array(
            'filename' => $fileName,
            'web_url' => $webUrl
        );
    }

}